import { NextRequest, NextResponse } from 'next/server';
import { promises as fs } from 'fs';
import path from 'path';
import { parseExcelBuffer } from '@/lib/excel-parser.server';
import { readFileSync } from 'fs';
import { join } from 'path';

/**
 * GET 请求处理 - 读取并解析指定的Excel文件
 * @param request NextRequest对象,包含请求参数
 * @returns 解析后的Excel数据或错误信息
 */
export async function GET(request: NextRequest) {
  try {
    // 从URL中获取文件名参数
    const { searchParams } = new URL(request.url);
    const filename = searchParams.get('filename');
    
    // 验证文件名是否存在
    if (!filename) {
      return NextResponse.json({ error: '请指定文件名' }, { status: 400 });
    }
    
    // 构建完整的文件路径
    const filePath = join(process.cwd(), 'excel', filename);
    
    try {
      // 读取Excel文件内容
      const buffer = readFileSync(filePath);
      
      // 解析Excel文件内容
      // 使用buffer.slice()确保正确处理文件缓冲区
      const parsedData = parseExcelBuffer(buffer.buffer.slice(
        buffer.byteOffset,
        buffer.byteOffset + buffer.byteLength
      ), filename);
      
      return NextResponse.json(parsedData);
    } catch (fileError) {
      console.error('读取文件失败:', fileError);
      return NextResponse.json({ error: '文件不存在或无法读取' }, { status: 404 });
    }
  } catch (error) {
    console.error('API错误:', error);
    return NextResponse.json({ error: '服务器内部错误' }, { status: 500 });
  }
}

/**
 * POST 请求处理 - 处理上传的Excel文件
 * @param request NextRequest对象,包含上传的文件
 * @returns 解析后的Excel数据或错误信息
 */
export async function POST(request: NextRequest) {
  try {
    // 获取上传的文件
    const formData = await request.formData();
    const file = formData.get('file') as File;
    
    // 验证文件是否存在
    if (!file) {
      return NextResponse.json(
        { error: '没有上传文件' },
        { status: 400 }
      );
    }

    // 验证文件格式
    if (!file.name.match(/\.(xlsx|xls)$/i)) {
      return NextResponse.json(
        { error: '只支持Excel文件格式 (.xlsx, .xls)' },
        { status: 400 }
      );
    }

    // 将文件转换为ArrayBuffer以供解析
    const buffer = await file.arrayBuffer();
    
    // 解析Excel文件内容
    const parsedData = parseExcelBuffer(buffer, file.name);
    
    return NextResponse.json(parsedData);
  } catch (error) {
    console.error('处理上传文件失败:', error);
    return NextResponse.json(
      { error: '处理上传文件失败' },
      { status: 500 }
    );
  }
} 